<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class SysTableColumns extends CI_Model
{
	public $Tables = array();		//
	public $Columns = array();		//
	public $PKFieldName;	//
	public $ParentIDFieldName;	//
	public $AnchorFieldName;
	public $SelectList;		//
	public $TableCaption;
	public $TableID;
	
	function GetTables()
	{
		// Переключаемся на БД с описанием системы и список таблиц
		$MetaDB = $this->load->database('Meta',True);	
		$Query = $MetaDB->get('SysTables');
		$this->Tables = $Query->result_array();
		$MetaDB->close();
		return True;
	}
	
	function GetTableColumns($TableName)
	{
		// Переключаемся на БД с описанием системы и получаем ID и описание таблицы
		$MetaDB = $this->load->database('Meta',True);	
		$MetaDB->where('TableName',$TableName);
		$Query = $MetaDB->get('SysTables');
		if ($Query->num_rows()>0) {
			$Row = $Query->Row();
			$this->TableID = $Row->TableID;
			$this->TableCaption = $Row->Caption;
		}
		unset($Row);
		unset($Query);
		
		// Получаем описание полей таблицы
		$MetaDB->where('TableID',$this->TableID);
		$MetaDB->order_by('Position');
		$Query = $MetaDB->get('SysTableColumns');
		foreach ($Query->result() as $Row) { // Нужен массив с индексами, равными именам полей, поэтому result_array не подходит
			$this->Columns[$Row->ColumnName] = get_object_vars($Row);
		}
		$MetaDB->close();
					
		// Переключаемся на основную БД, получаем свойства полей, дозаполняем в $Columns тип поля и признак ПК
		$this->load->database('default',True);
		$Fields = $this->db->field_data($TableName);
		$this->PKFieldName='';
		foreach ($Fields as $Field) {
			if ($Field->primary_key==1) {$this->PKFieldName=$Field->name;}
			foreach ($this->Columns as &$Column) {
				if ($Column['ColumnName']==$Field->name) {
					$Column['IsPrimaryKey'] = $Field->primary_key;
					$Column['Type']=$Field->type;
					break;
				}
			}
		}
		// Имя поля-ссылки на родителя, имя поля для отображения гипертекстовых ссылок
		foreach ($this->Columns as $Column3) {
			if ($Column3['DictTableID']==$this->TableID) {$this->ParentIDFieldName=$Column3['ColumnName'];}  // Обдумать!
			if ($Column3['IsAnchor']==1) {$this->AnchorFieldName=$Column3['ColumnName'];}  // Не понадобится?
		}
		// Список полей для SELECT-а
		$this->SelectList='';
		end($this->Columns);
		$LastKey=key($this->Columns);
		foreach ($this->Columns as $Key => $Column2) {
			$this->SelectList.=$Column2['ColumnName'];
			if ($Key<>$LastKey) {$this->SelectList.=', ';}
		}
		
		return True;
	}
}